Research Question:
What impacts population growth around the world?

Motivation:
We often see on the news that “country X reported the lowest birth rate/population growth in decades.” Thus, I want to know what impacts birth rate/population growth and whether it is related to a country’s development.

Data Source(s):
1. World Bank Development Indicators (Population growth, urban population growth, birth rate, death rate, net migration, urban population percentage, child mortality)
2. World Bank & OECD national accounts data files (GDP, GDP per capita)
3. National Bureau of Statistics of China (China 2020 birth rate)

Variable Clarification:
Birth Rate/Death Rate/Infant Mortality Rate all refers to number of people per 1000 population

Plan:
Because this is a 40-point project, the project will be broken down into 2 main section:
1. The correlation between development and population growth
2. The 3 factors impacting population growth (Causation)
In the first section, we will look at the relationship between several different development indicators and population/urban population growth. Keep in mind that the relationship we find here are all correlations, not causations.
In the second section, we are going to dig deeper into what CAUSES these population and birth rate fluctuations.

Design Process:
Read in the files

GDP <- read_csv("GDP_data.csv")
## Rows: 266 Columns: 65
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): Country Name, Country Code, Indicator Name, Indicator Code
## dbl (61): 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
GDP_per_capita <- read_csv("GDP_per_capita_data.csv")
## Rows: 266 Columns: 65
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (4): Country Name, Country Code, Indicator Name, Indicator Code
## dbl (61): 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Population <- read_csv("Population_data.csv")
## Rows: 1601 Columns: 95
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (95): Country Name, Country Code, Series Name, Series Code, 1960, 1961, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Birth_rate <- filter(Population,`Series Name`=="Birth rate, crude (per 1,000 people)")
Population_growth <- select(Birth_rate,-`1960`)
Population_growth <- filter(Population,`Series Name`=="Population growth (annual %)")
Population_growth <- select(Population_growth,-`1960`)
Region <- read_csv("Region.csv")
## New names:
## Rows: 265 Columns: 6
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (5): Country Code, Region, IncomeGroup, SpecialNotes, TableName lgl (1): ...6
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...6`

Section 1: Countries Development & Population Growth
Graph Set 1: Scatter plot of GDP vs population growth

Population_growth_2020 <- select(Population_growth,`2020`,`Country Name`)
Population_growth_2020 <- rename(Population_growth_2020, `Population Growth`=`2020`)
Population_GDP_2020 <- full_join(Population_growth_2020,GDP)
## Joining with `by = join_by(`Country Name`)`
Population_GDP_2020 <- select(Population_GDP_2020, `Country Name`,`Population Growth`, `2020`)
Population_GDP_2020 <- rename(Population_GDP_2020, `GDP`=`2020`)
Population_GDP_2020 <- filter(Population_GDP_2020, !is.na(GDP),!is.na(`Population Growth`))
Population_GDP_2020 <- filter(Population_GDP_2020, `Population Growth` != "..")
Population_GDP_2020$`Population Growth` <- as.numeric(Population_GDP_2020$`Population Growth`)
graph_1_a <- ggplot(Population_GDP_2020)+geom_point(aes(x=`GDP`, y=`Population Growth`)) + labs(y="Population Growth (%)") +theme_classic()
graph_1_a

graph_1_b <- ggplot(Population_GDP_2020,aes(x=`GDP`, y=`Population Growth`))+geom_point() + scale_x_continuous(limits=c(0,1.5e+11))+ geom_smooth(method="lm",se=T,level=.95) + labs(y="Population Growth (%)")+ theme_classic()
graph_1_b
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 97 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 97 rows containing missing values (`geom_point()`).

This is a graph that compares birth rate (%) and GDP of a state. There is no direct correlation between these 2 variables.

Graph Set 2: Scatter plot of GDP Per Capita vs population growth

Population_GDP_per_2020 <- full_join(Population_growth_2020,GDP_per_capita)
## Joining with `by = join_by(`Country Name`)`
Population_GDP_per_2020 <- select(Population_GDP_per_2020, `Country Name`,`Population Growth`, `2020`)
Population_GDP_per_2020 <- rename(Population_GDP_per_2020, `GDP Per Capita`=`2020`)
Population_GDP_per_2020 <- filter(Population_GDP_per_2020, !is.na(`GDP Per Capita`),!is.na(`Population Growth`))
Population_GDP_per_2020 <- filter(Population_GDP_per_2020, `Population Growth` != "..")
Population_GDP_per_2020$`Population Growth` <- as.numeric(Population_GDP_per_2020$`Population Growth`)
graph_2 <- ggplot(Population_GDP_per_2020,aes(x=`GDP Per Capita`, y=`Population Growth`))+geom_point() + scale_x_continuous(limits=c(0,50000))+ labs(y="Population Growth (%)")+  geom_smooth(method="lm",se=T,level=.95)+ theme_classic()
graph_2
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 16 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 16 rows containing missing values (`geom_point()`).

Birth_rate_2019 <- select(Birth_rate,`2019`,`Country Name`)
Birth_rate_2019 <- rename(Birth_rate_2019, `Birth Rate`=`2019`)
Birth_GDP_2019 <- full_join(Birth_rate_2019,GDP_per_capita)
## Joining with `by = join_by(`Country Name`)`
Birth_GDP_2019 <- select(Birth_GDP_2019, `Country Name`,`Birth Rate`, `2019`)
Birth_GDP_2019 <- rename(Birth_GDP_2019, `GDP`=`2019`)
Birth_GDP_2019 <- filter(Birth_GDP_2019, !is.na(GDP),!is.na(`Birth Rate`))
Birth_GDP_2019 <- filter(Birth_GDP_2019, `Birth Rate` != "..")
Birth_GDP_2019$`Birth Rate` <- as.numeric(Birth_GDP_2019$`Birth Rate`)
graph_2_b <- ggplot(Birth_GDP_2019,aes(x=`GDP`, y=`Birth Rate`))+geom_point() + labs(y="Birth Rate (%)",x="GDP Per Capita") +theme_classic()+scale_x_continuous(limits=c(0,50000))+geom_smooth(method="lm",se=T,level=.95)
graph_2_b
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 20 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 20 rows containing missing values (`geom_point()`).

When we compare GDP per capita with birth rate & populaion growth, we do see a negative relationship, meaning that as a country’s average person gets wealthier, they are less likely to give birth to a child.

Graph Set 3: Scatter plot of GDP Per Capita vs population growth: By Region

Population_GDP_per_2020 <- full_join(Population_GDP_per_2020,Region,by=c("Country Name"="TableName"))
graph_3 <- ggplot(Population_GDP_per_2020,aes(x=`GDP Per Capita`, y=`Population Growth`))+geom_point(aes(color=Region)) + scale_x_continuous(limits=c(0,50000))+ geom_smooth(aes(group=Region,color=Region),method="lm",se=T,level=0)+ labs(y="Population Growth (%)")+theme_classic()
graph_3
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 51 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 51 rows containing missing values (`geom_point()`).

We can see from this graph that most of the regions do follow the trend indicated by the previous grpahs. 2 exceptions are Europe & Central Asia and Middle East & North Africa.

Graph Set 4 (Unused): Scatter plot of GDP vs urban population growth

Urban_population <- filter(Population,`Series Name`=="Urban population growth (annual %)")
Urban_population <- select(Urban_population,-`1960`)
Urban_population_2020 <- select(Urban_population,`2020`,`Country Name`)
Urban_population_2020 <- rename(Urban_population_2020, `Population Growth`=`2020`)
Urban_GDP_2020 <- full_join(Urban_population_2020,GDP_per_capita)
## Joining with `by = join_by(`Country Name`)`
Urban_GDP_2020 <- select(Urban_GDP_2020, `Country Name`,`Population Growth`, `2020`)
Urban_GDP_2020 <- rename(Urban_GDP_2020, `GDP Per Capita`=`2020`)
Urban_GDP_2020 <- filter(Urban_GDP_2020, !is.na(`GDP Per Capita`),!is.na(`Population Growth`))
Urban_GDP_2020 <- filter(Urban_GDP_2020, `Population Growth` != "..")
Urban_GDP_2020$`Population Growth` <- as.numeric(Urban_GDP_2020$`Population Growth`)
graph_4<- ggplot(Urban_GDP_2020,aes(x=`GDP Per Capita`, y=`Population Growth`))+geom_point() + scale_x_continuous(limits=c(0,50000))+ geom_smooth(method="lm",se=T,level=.95) + labs(y="Population Growth (%)")+ theme_classic()
graph_4
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 16 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 16 rows containing missing values (`geom_point()`).

This graph is not used in the presentation, it shows a similar trend as previous graphs but this time we are using population urban growth instead of overall population growth.The slope seems to be higher, meaning that there is a more direct negative relationship between urban population growth and GDP per capita.

Graph Set 5 (Unused): Scatter plot of GDP Per Capita vs population growth: By Region

Urban_GDP_2020 <- full_join(Urban_GDP_2020,Region,by=c("Country Name"="TableName"))
graph_5 <- ggplot(Urban_GDP_2020,aes(x=`GDP Per Capita`, y=`Population Growth`))+geom_point(aes(color=Region)) + scale_x_continuous(limits=c(0,50000))+ geom_smooth(aes(group=Region,color=Region),method="lm",se=T,level=0)+ labs(y="Population Growth (%)")+theme_classic()
graph_5
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 52 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 52 rows containing missing values (`geom_point()`).

Reproduction of graph set 3, exact same graph.

Section 2: 3 factors impacting population growth
Graph set 6: Scatter plot of population growth v.s net birth rate

Population_growth_2019 <- select(Population_growth,`2019`,`Country Name`)
Population_growth_2019 <- rename(Population_growth_2019, `Population Growth`=`2019`)
Birth_rate_2019 <-filter(Population, `Series Name`=="Birth rate, crude (per 1,000 people)")
Birth_rate_2019 <- select(Birth_rate_2019, `Country Name`,`2019`)
Birth_rate_2019 <- rename(Birth_rate_2019, `Birth Rate`=`2019`)
Birth_population <- full_join(Birth_rate_2019,Population_growth_2019)
## Joining with `by = join_by(`Country Name`)`
Birth_population <- filter(Birth_population, !is.na(`Population Growth`),!is.na(`Birth Rate`))
Birth_population <- filter(Birth_population, `Population Growth` != "..",`Birth Rate` != "..")
Birth_population$`Population Growth` <- as.numeric(Birth_population$`Population Growth`)
Birth_population$`Birth Rate` <- as.numeric(Birth_population$`Birth Rate`)
graph_6 <- ggplot(Birth_population,aes(x=`Birth Rate`, y=`Population Growth`))+geom_point() + scale_x_continuous()+ geom_smooth(method="lm",se=T,level=0)+ labs(y="Population Growth (%)")+theme_classic()
graph_6
## `geom_smooth()` using formula = 'y ~ x'

This graph explores the causal relationship between birth rate and population growth. There is a pretty apparant and direct positive relationship between them, which is easily expected.

Graph 7: Scatter plot of birth rate v.s. Death rate

Birth_death_2019 <-filter(Population, `Series Name`=="Birth rate, crude (per 1,000 people)"|`Series Name`=="Death rate, crude (per 1,000 people)"|`Series Name`=="Mortality rate, infant (per 1,000 live births)")
Birth_death_2019 <-select(Birth_death_2019,`Country Name`,`Series Name`,`2019`)
Birth_death_2019 <- pivot_wider(Birth_death_2019,names_from="Series Name",values_from="2019")
Birth_death_2019 <- rename(Birth_death_2019,"Death Rate"="Death rate, crude (per 1,000 people)","Birth Rate"="Birth rate, crude (per 1,000 people)","Infant Mortality"="Mortality rate, infant (per 1,000 live births)")
Birth_death_2019 <- filter(Birth_death_2019, `Birth Rate` != "..",`Death Rate` != "..",`Infant Mortality` != "..")
Birth_death_2019$`Birth Rate` <- as.numeric(Birth_death_2019$`Birth Rate`)
Birth_death_2019$`Death Rate` <- as.numeric(Birth_death_2019$`Death Rate`)
Birth_death_2019$`Infant Mortality` <- as.numeric(Birth_death_2019$`Infant Mortality`)
graph_7 <- ggplot(Birth_death_2019,aes(x=`Birth Rate`, y=`Death Rate`))+geom_point() + scale_x_continuous()+ labs(y="Death Rate")+theme_classic()
graph_7

This graph compared birth rate with death rate. As you can see from the graph, they do not have a direct but rather polynomial relationship. The threshold is aroun a birth rate of 26. In reality, most countries on the left side of the threshold are devloped countries and on the right side of the graph we see developing and under-developed countries. This difference is caused by high infant mortality in these countries. In other words, in these under-developed countries, mant infants die at birth, which explains why a high birth rate is also related to a high death rate.

Graph Set 8: Scatter plot of birth rate v.s. Infant mortlity rate

graph_8 <- ggplot(Birth_death_2019,aes(x=`Birth Rate`, y=`Infant Mortality`))+geom_point() + scale_x_continuous()+ geom_smooth(method="lm",se=T,level=.95)+ labs(y="Infant Mortality")+theme_classic()
graph_8
## `geom_smooth()` using formula = 'y ~ x'

This graph explains the last one, showing a direct positive relationsip between birth rate and infant mortality. In underdeveloped countries, we expect both rates to be high.

Graph Set 9: Line chart zooming in into the U.S., China, and Japan

Country <-filter(Population, `Country Name`=="China"|`Country Name`=="Japan"|`Country Name`=="Germany"|`Country Name`=="India")
Country <-select(Country, `Country Name`:`2019`)
Country <-pivot_longer(Country,`1960`:`2019`,values_to="Rate",names_to="Year")
Country <-pivot_wider(Country,values_from="Rate",names_from="Series Name")
one <- select(Country,1,4,5)
two <- select(Country,1,4,6)
three <- select(Country,1,4,7)
four <- select(Country,1,4,8)
five <- select(Country,1,4,9)
six <- select(Country,1,4,10)
one <- filter(one,!is.na(`Death rate, crude (per 1,000 people)`))
two <- filter(two,!is.na(`Birth rate, crude (per 1,000 people)`))
three <- filter(three,!is.na(`Net migration`))
four <- filter(four,!is.na(`Population growth (annual %)`))
five <- filter(five,!is.na(`Urban population growth (annual %)`))
six <- filter(six,!is.na(`Mortality rate, infant (per 1,000 live births)`))
Country <-full_join(one,two)
## Joining with `by = join_by(`Country Name`, Year)`
Country <-full_join(Country,three)
## Joining with `by = join_by(`Country Name`, Year)`
Country <-full_join(Country,four)
## Joining with `by = join_by(`Country Name`, Year)`
Country <-full_join(Country,five)
## Joining with `by = join_by(`Country Name`, Year)`
Country <-full_join(Country,six)
## Joining with `by = join_by(`Country Name`, Year)`
Country <- rename(Country,"Death Rate"="Death rate, crude (per 1,000 people)","Birth Rate"="Birth rate, crude (per 1,000 people)","Infant Mortality"="Mortality rate, infant (per 1,000 live births)","Population Growth"="Population growth (annual %)","Urban population"="Urban population growth (annual %)")
Country$`Birth Rate` <- as.numeric(Country$`Birth Rate`)
Country$`Death Rate` <- as.numeric(Country$`Death Rate`)
Country$`Net migration` <- as.numeric(Country$`Net migration`)
## Warning: NAs introduced by coercion
Country$`Population Growth` <- as.numeric(Country$`Population Growth`)
## Warning: NAs introduced by coercion
Country$`Urban population` <- as.numeric(Country$`Urban population`)
## Warning: NAs introduced by coercion
Country$`Infant Mortality` <- as.numeric(Country$`Infant Mortality`)
## Warning: NAs introduced by coercion
#Birth Rates
graph_9_a <- ggplot(Country,aes(x=Year,y=`Birth Rate`))+geom_line(aes(group=`Country Name`,color=`Country Name`))+theme_classic()+scale_x_discrete(breaks=c(1960,1970,1980,1990,2000,2010,2019))
graph_9_a

#Population Growths
graph_9_b <- ggplot(Country,aes(x=Year,y=`Population Growth`))+geom_line(aes(group=`Country Name`,color=`Country Name`))+theme_classic()+scale_x_discrete(breaks=c(1960,1970,1980,1990,2000,2010,2019))
graph_9_b
## Warning: Removed 4 rows containing missing values (`geom_line()`).

#China
China <- filter(Country,`Country Name`=="China")
graph_9_c <- ggplot(China)+geom_line(aes(group=`Country Name`,x=Year,y=`Birth Rate`,color=`Country Name`))+geom_line(aes(group=`Country Name`,x=Year,y=`Death Rate`,color=`Country Name`))+theme_classic()+scale_x_discrete(breaks=c(1960,1970,1980,1990,2000,2010,2019))
China_migration <- select(China,`Year`,`Net migration`)
China_migration <- filter(China_migration,!is.na(`Net migration`))
graph_9_d <- ggplot(China_migration)+geom_line(aes(group=1,x=Year,y=`Net migration`))+theme_classic()
graph_9_c

graph_9_d

require(gridExtra)
## Loading required package: gridExtra
## 
## Attaching package: 'gridExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
grid.arrange(graph_9_c,graph_9_d)

#Germany & Japan: Net birth rate, population growth, and net migration
Germany <- filter(Country,`Country Name`=="Germany")
Germany <- mutate(Germany,`Net Birth` = `Birth Rate`-`Death Rate`)
Japan <- filter(Country,`Country Name`=="Japan")
Japan <- mutate(Japan,`Net Birth` = `Birth Rate`-`Death Rate`)
GJ <- rbind(Germany,Japan)
graph_9_d <- ggplot(GJ)+geom_line(aes(group=`Country Name`,x=Year,y=`Net Birth`,color=`Country Name`))+theme_classic()+geom_hline(linetype="dashed",yintercept=0)+scale_x_discrete(breaks=c(1960,1970,1980,1990,2000,2010,2019))
graph_9_e <- ggplot(GJ)+geom_line(aes(group=`Country Name`,x=Year,y=`Population Growth`,color=`Country Name`))+geom_hline(linetype="dashed",yintercept=0)+theme_classic()+scale_x_discrete(breaks=c(1960,1970,1980,1990,2000,2010,2019))
graph_9_d

graph_9_e
## Warning: Removed 2 rows containing missing values (`geom_line()`).

GJ_migration <- select(GJ,`Country Name`,`Year`,`Net migration`)
GJ_migration <- filter(GJ_migration,!is.na(`Net migration`))
GJ_migration <- mutate(GJ_migration,"Net migration"=`Net migration`/1000000)
graph_9_f <- ggplot(GJ_migration)+geom_line(aes(group=`Country Name`,x=Year,y=`Net migration`,color=`Country Name`))+theme_classic()+scale_y_continuous()+labs(y="Net Migration (in millions)")+geom_hline(linetype="dashed",yintercept=0)
graph_9_f

Here, we are zooming in into 4 countries. China, Germany, India, and Japan. We are only using the first graph in the presentation, so you can neglect the other ones. As you can see from the graph, no matter what developing stage the country is at, as time passes, the country’s population growth rate decreases. This is a global trend.

Comparison around the globe
Graph 10: Choropleth map of population growth, urbanization, birth rate, and GDP per capita, a comparison around the world.

world_map <- map_data("world")
#population_names <- levels(as.factor(Population$`Country Name`))
#map_names <- levels(as.factor(world_map$region))
#map_names[which( !(map_names %in% population_names) )]
#population_names[which( !(population_names %in% map_names) )]
world_map <- mutate(world_map, region=fct_recode(region, "United States" = "USA", "United Kingdom" = "UK", "Congo, Rep." = "Republic of Congo" , "Lao PDR" = "Laos", "Korea, Rep." = "South Korea", "Viet Nam" = "Vietnam","Venezuela (Bolivarian Republic of)" = "Venezuela", "Russian Federation" = "Russia", "Korea, Dem. People's Rep." = "North Korea", "Iran, Islamic Rep." = "Iran", "Syrian Arab Republic" = "Syria", "Trinidad and Tobago" = "Trinidad", "Trinidad and Tobago" = "Tobago","Antigua and Barbuda" = "Antigua", "Antigua and Barbuda" = "Barbuda","St. Vincent and the Grenadines" = "Saint Vincent","Saint Vincent and the Grenadines" = "Grenadines","St. Kitts and Nevis" = "Saint Kitts", "Saint Kitts and Nevis" = "Nevis","China" = "Taiwan","Brunei Darussalam" = "Brunei", "Micronesia, Fed. Sts." = "Micronesia","Yemen, Rep."="Yemen","Egypt, Arab Rep."="Egypt","Denmark"="Greenland","Eswatini"="Swaziland","Slovak Republic"="Slovakia","Congo, Dem. Rep."="Democratic Republic of the Congo","Cote d'Ivoire"="Ivory Coast","Kyrgyz Republic"="Kyrgyzstan"))
mapping_data_1 <- full_join(Population_GDP_per_2020, world_map,by=c("Country Name" = "region"))
## Warning in full_join(Population_GDP_per_2020, world_map, by = c(`Country Name` = "region")): Each row in `x` is expected to match at most 1 row in `y`.
## ℹ Row 1 of `x` matches multiple rows.
## ℹ If multiple matches are expected, set `multiple = "all"` to silence this
##   warning.
library(viridis)
## Loading required package: viridisLite
#GDP Per Capita
ggplot(mapping_data_1,aes(x=long,y=lat))+geom_polygon(aes(group=group,fill=`GDP Per Capita`),
color="black")+
  geom_polygon(data=filter(mapping_data_1,`Country Name`=="Lesotho"),color="black")+
  labs(title="GDP Per Capita By Country \n",x="",y="")+ theme_void()+coord_map(xlim=c(-180,180),ylim=c(-55,90))+scale_fill_viridis(trans="log2",option="B",direction=-1)

#Population Growth
#population_names <- levels(as.factor(Birth_death_2019$`Country Name`))
#map_names <- levels(as.factor(world_map$region))
#map_names[which( !(map_names %in% population_names) )]
#population_names[which( !(population_names %in% map_names) )]

Birth_death_2019 <- mutate(Birth_death_2019,`Net Birth Rate`=`Birth Rate`-`Death Rate`)
mapping_data_2 <- full_join(Birth_death_2019,world_map,by=c("Country Name"="region"))
## Warning in full_join(Birth_death_2019, world_map, by = c(`Country Name` = "region")): Each row in `x` is expected to match at most 1 row in `y`.
## ℹ Row 1 of `x` matches multiple rows.
## ℹ If multiple matches are expected, set `multiple = "all"` to silence this
##   warning.
ggplot(mapping_data_2,aes(x=long,y=lat))+geom_polygon(aes(group=group,fill=`Net Birth Rate`),
color="black")+
  geom_polygon(data=filter(mapping_data_2,`Country Name`=="Lesotho"),color="black")+
  labs(title="Net Birth Rate By Country \n",x="",y="")+ theme_void()+coord_map(xlim=c(-180,180),ylim=c(-55,90))+
  scale_fill_distiller(palette="OrRd",direction=1)

#Population Death Rates
ggplot(mapping_data_2,aes(x=long,y=lat))+geom_polygon(aes(group=group,fill=`Infant Mortality`),
color="black")+
  geom_polygon(data=filter(mapping_data_2,`Country Name`=="Lesotho"),color="black")+
  labs(title="Infant Mortality By Country \n",x="",y="")+ theme_void()+coord_map(xlim=c(-180,180),ylim=c(-55,90))+
  scale_fill_distiller(palette="OrRd",direction=1)

These 3 graphs are meant to subsitute some of the graphs above.
The first graph is a choropleth on a country’s GDP on a log scale.
The second and third graph compared net birth rates and infant motality rates around the globe. Poorer countries typically have really high Net birth rates (due to high birth rates) but even higher infant mortality rates.

Conclusion:
1. Developed countries have a lower population growth rate
2. Under-developed countries have a much higher birth rate AND high death rates due to high infant mortality
3. Net migration can impact a country’s population growth dramatically
4. Lower birth rates have become a global trend despite of developing stages